﻿using nplJobsCommon.Job;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace nplJobsCommon.Common
{
    /// <summary>
    /// Created by:A.K. Hasanuzzaman 
    /// Created on: 06.02.2013
    /// This class represents a job
    /// </summary>
    [Serializable]
    public class Job:EntityBase
    {

        /// <summary>
        ///Job ID
        /// </summary>
        /// 
        [DataColumn(true)]
        public long JobID { get; set; }
        public string EncodeJobID { get; set; }

        [DataColumn(true)]
        public string JobTitle { get; set; }
        /// <summary>
        /// Job Category ID
        /// </summary>
        [DataColumn(true)]
        public int JobCategoryID { get; set; }
        /// <summary>
        /// Job Responsibilities of job
        /// </summary>
        /// 
        [DataColumn(true)]
        public string JobCategory { get; set; }
        /// <summary>
        /// Number Of Vacancies
        /// </summary>
        /// 
        [DataColumn(true)]
        public int NumberOfVacancies { get; set; }
        /// <summary>
        /// Job Responsibilities of job
        /// </summary>
        /// 
        [DataColumn(true)]
        public string JobResponsibilities { get; set; }
        /// <summary>
        /// Job type id of job
        /// </summary>
        ///         
        [DataColumn(true)]
        public int JobTypeID { get; set; }

        [DataColumn(true)]
        public string JobType { get; set; }

        /// <summary>
        /// City id 
        /// </summary>
        /// 
        [DataColumn(true)]
        public int CityID { get; set; }

        [DataColumn(true)]
        public string CityName { get; set; }

        [DataColumn(true)]
        public string CountryName { get; set; }

        /// <summary>
        /// Career level id 
        /// </summary>
        /// 
        [DataColumn(true)]
        public int CareerLevelID { get; set; }
        /// <summary>
        /// PostedDate of job
        /// </summary>
        /// 
        [DataColumn(true)]
        public DateTime PostedDate { get; set; }
        /// <summary>
        /// ExpiryDate of job
        /// </summary>
        /// 
        [DataColumn(true)]
        public DateTime ApplicationDateline { get; set; }
        /// <summary>
        /// NumberOfViews 
        /// </summary>
        /// 
        [DataColumn(true)]
        public int NumberOfViews { get; set; }
        /// <summary>
        /// Internal job code 
        /// </summary>
        /// 
        [DataColumn(true)]
        public string InternalJobCode { get; set; }
        /// <summary>
        /// Benefits of job
        /// </summary>
        /// 
        [DataColumn(true)]
        public string Benefits { get; set; }
        /// <summary>
        /// Qualifications for job
        /// </summary>
        /// 
        [DataColumn(true)]
        public string Qualifications { get; set; }
        /// <summary>
        /// Skills require for job
        /// </summary>
        /// 
        [DataColumn(true)]
        public string Skills { get; set; }
        /// <summary>
        /// EmployeerID
        /// </summary>
        /// 
        [DataColumn(true)]
        public Guid EmployeerID { get; set; }
        
        /// <summary>
        /// SalaryID
        /// </summary>
        /// 
        [DataColumn(true)]
        public int SalaryID { get; set; }


        [DataColumn(true)]
        public string CompanyName { get; set; }

        [DataColumn(true)]
        public string CompanyImage { get; set; }

        [DataColumn(true)]
        public string Address { get; set; }

        [DataColumn(true)]
        public string Range { get; set; }

        [DataColumn(true)]
        public long ContactPersonID { get; set; }

        [DataColumn(true)]
        public string ContactPerson { get; set; }

        [DataColumn(true)]
        public string ContactPersonEmail { get; set; }

        [DataColumn(true)]
        public string ContactPersonContactNumber { get; set; }

        [DataColumn(true)]
        public string ContactPersonAlternativeNumber { get; set; }

        [DataColumn(true)]
        public int TitleID { get; set; }
        
        [DataColumn(true)]
        public string Title { get; set; }
        
        /// <summary>
        /// Application procedure id 
        /// </summary>
        /// 
        
        public List<JobApplicationProcedure> JobApplicationProcedures { get; set; }
        /// <summary>
        /// Application instructions of job
        /// </summary>
        [DataColumn(true)]
        public string ApplicationInstructions { get; set; }
        /// <summary>
        /// number of vacancies for job
        /// </summary>
        [DataColumn(true)]
        public int Vacancies { get; set; }
        /// <summary>
        /// Alternative company name
        /// </summary>
        [DataColumn(true)]
        public string AlternativeCompanyName { get; set; }
        /// <summary>
        /// IsDeleted
        /// </summary>
        [DataColumn(true)]
        public Boolean IsDeleted { get; set; }
        /// <summary>
        /// Is company info. visible
        /// </summary>
        [DataColumn(true)]
        public Boolean IsCompanyInfoVisible { get; set; }
        /// <summary>
        /// Is contact persons visible
        /// </summary>
        [DataColumn(true)]
        public Boolean IsContactPersonsVisible { get; set; }
        /// <summary>
        ///Ia photo enclosed
        /// </summary>
        [DataColumn(true)]
        public Boolean IsPhotoEnclosed { get; set; }
        
        [DataColumn(true)]
        public bool isOnlineResume { get; set; }

        [DataColumn(true)]
        public bool isEmailAttachment { get; set; }

        [DataColumn(true)]
        public bool isHardCopy { get; set; }

        [DataColumn(true)]
        public bool isGovtJob { get; set; }

        [DataColumn(true)]
        public string Banner { get; set; }

        /// <summary>
        /// 
        /// </summary>
        [DataColumn(true)]
        public int AgeRangeFrom { get; set; }
        /// <summary>
        /// 
        /// </summary>
        [DataColumn(true)]
        public int AgeRangeTo { get; set; }

        /// <summary>
        /// 
        /// </summary>
        [DataColumn(true)]
        public int Gender { get; set; }

        /// <summary>
        /// 
        /// </summary>
        [DataColumn(true)]
        public int RequiredExperience { get; set; }
        
        [DataColumn(true)]
        public int SalaryRange { get; set; }
        [DataColumn(true)]
        public string SalaryRangeMin { get; set; }
        [DataColumn(true)]
        public string SalaryRangeMax { get; set; }

        [DataColumn(true)]
        public int JobPublishStatus { get; set; }
        
        /// <summary>
        /// Job Image Path
        /// </summary>
        [DataColumn(true)]
        public string JobImagePath { get; set; }
                
        public string WorkType { get; set; }

        [DataColumn(true)]
        public decimal TotalYearsOfExpMin { get; set; }
        [DataColumn(true)]
        public decimal TotalYearsOfExpMax { get; set; }
        [DataColumn(true)]
        public string ExperienceArea { get; set; }
        [DataColumn(true)]
        public string KnownLanguage { get; set; }


        [DataColumn(true)]
        public int JobLocationType { get; set; }

        [DataColumn(true)]
        public string Location { get; set; }

        /// <summary>
        /// 
        /// </summary>
        [DataColumn(true)]
        public int Deadline { get; set; }

        /// <summary>
        /// 
        /// </summary>
        [DataColumn(true)]
        public int EmployeerTypeID { get; set; }

        [DataColumn(true)]
        public string JobSource { get; set; }
    }
}
